
        <html>
			<head>
			     <title>滥用Accessibility service自动安装应用 - 阿里移动安全</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/papers/11494">http://drops.wooyun.org/papers/11494</a></h1>
				
      <p>
        <p><strong>Author:<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="c12841472476758128597e28464d26667a244b69246f48244469">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></strong></p>

<h1>0x00 恶意应用简介</h1>

<hr />

<p>近年许多的android市场实现免root安装应用，也就是下载完成立即自动安装，而黑产界也同样利用该技术在进行恶意推广，静默安装。最近拦截到大量恶意应用利用系统AccessibilityService静默安装应用。一旦恶意的Accessibility服务被激活，恶意应用将弹出广告，即使用户关闭弹出的广告该应用程序也会在后台下载，随后自动安装推广的恶意应用。</p>

<h1>0x01 AccessibilityService介绍：</h1>

<hr />

<p>AccessibilityService作用：</p>

<p>Android Accessibility用于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户，Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备。开发者可以搭建自己的Accessibility服务，这可以加强应用的可用性。开启AccessibilityService后应用通过它能实时地获取当前操作应用的窗口元素信息，并能够双向交互，既能获取用户的输入，也能对窗口元素进行操作，比如点击按钮。</p>

<!--more-->

<p>AccessibilityService的使用场景：</p>

<p>Android应用市场使用android Accessibility来免root安装应用；近来火热的抢红包应用也用使用AccessibilityService自动抢红包。</p>

<h1>0x02 恶意应用分析</h1>

<hr />

<p>我们监测到一款名为“WiFi密码查看器(增强版)”的应用滥用AccessibilityService。应用启动后诱导用户开启“WIFI信号增强服”，其实就是开启恶意应用自身的AccessibilityService；以查看WIFI密码让恶意应用获得root权限，而这一切都是为该恶意自动安装做铺垫。下图是该应用运行图</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808475446727197.png" alt="p1" /> <img src="http://static.wooyun.org//drops/20151218/2015121808475629092236.png" alt="p2" /> 图应用启动与引导开启wifi信号增强界面</p>

<p>应用启动后会引导用户开启WIFI信号增强服务。应用跳转到ACCESSIBILITY_SETTINGS界面，提示用户若要增强Wifi信号强度，请开启WIFI信号增强服务。用户启用恶意应用的该服务之后，手机将疯狂下载该应用云端准备的应用包，并且在手机上自动安装运行。</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808475947240327.png" alt="p3" /> <img src="http://static.wooyun.org//drops/20151218/2015121808480194669425.png" alt="p4" /> 图启动Accessibilty Service界面</p>

<p>以下是恶意代码运行流程</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808480823740521.png" alt="p5" /> 图恶意代码云信流程</p>

<p>流程图解析</p>

<ol>
<li>Wifi_list模块，恶意应用利用wifi信号增强诱导用户开启<code>Accessiblity Service</code>;查看Wifi密码诱导用户给该应用赋予Root权限。</li>
<li>PushDownLoad模块，该模块由<code>PushCoreService</code>和<code>ChapingCoreService</code>服务组成，它们利用后台服务上传设备信息，获取待Push的应用包，下载应用包。</li>
<li>安装模块，恶意应用解析下载成功的包，然后弹出<code>DialogPushActivity</code>的广告框，非Root利用 <code>AccessilbityService</code>安装，root利用 <code>pm install</code>完成静默安装</li>
<li>daemon模块， daemon是存放在raw目录下的elf文件，它是一个守护进程，保护应用不被杀死。daemon原理是fork出子进程之后，让子进程成为新的会话的领头进程，并与其父进程的会话组和进程组脱离，紧接着就是在子进程中定时去启动java层配置的任务。这里它保证 <code>PushCoreService</code>和<code>ChapingCoreService</code>一直在后台运行。</li>
</ol>

<p>以下对核心服务<code>PushCoreService</code>跟踪分析</p>

<p>首先向目标服务器Post设备的imei,wifimac,SerialNumber信息，服务器返回uuid,并记录在<code>DefaultSharedPreference</code>文件的”uuid”字段</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808481219470621.png" alt="p6" /> 图请求服务器获取uuid</p>

<p>上图最后调用<code>this.m_context.handler.sendEmptyMessage(1)</code>，启动线程GetPushThread线程。该线程向<code>http://api.findzhibo.com/ad/open?appCode=1&amp;appVersion=appVerion</code>请求获取当前应用的“open&#95;status”字段。只有“open&#95;status”字段为True时，云端服务器才会继续运行，否则表示当前应用版本对应的云端关闭。开启状态向<code>http://api.findzhibo.com/index.php/ad/push</code>，发送post请求，服务器返回待push的应用，写入“cc&#95;push&#95;sp.xml”的push_json字段</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808481669154719.png" alt="p7" /> 图云端恶意推广app的push_json</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808481984902818.png" alt="p8" /> 图云端请求获取恶意推广应用</p>

<p>上图最后调用<code>this.m_context.handler.sendEmptyMessage(2)</code>,解析push_json字段填充intent,启动<code>PushDownloadService</code>进行应用下载和恶意广告页面弹出。<code>PushDownloadService</code>解析appJson,获取下载信息，随后通过handler消息对应用下载安装。</p>

<p><img src="http://static.wooyun.org//drops/20151218/2015121808482178919917.png" alt="p9" /> 图解析appJson,进行下载安装</p>

<p>Handler存在4个msg.what值，‘3’处理下载失败；‘4’下载成功；‘5’弹出DialogPushActivity广告框若开启Accessiblity Service，启动WifiZengQiangService； ‘6’弹出DialogPushActivity广告框，启动恶意推广的应用。 首先发送“4“表示开始后台下载，随后启动下载安装的线程。该线程检查本次推送的应用是否已经被下载到指定目录，sdcard/.wifi_ckq保存下载的应用包以及广告图片，appName经过md5加密。</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084823495931016.png" alt="p10" /> 图sdcard目录存放下载的推广应用包</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084825386771120.png" alt="p11" /> 图下载恶意推广应用</p>

<p>下载完成后发送对应用静默安装，设备非root发送‘5’，root使用 pm install安装应用随后发送‘6’启动应用。</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084827390001215.png" alt="p12" /> 图发送handler安装应用</p>

<p>handler ‘5’,’6’都会启动DialogPushActivity，</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084829171611313.png" alt="p13" /> 图启动DialogPushActivity</p>

<p>DialogPushActivity其实就是一个ImageView，用户在触摸该界面后推送的应用将被自动安装</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084833821361413.png" alt="p14" /> <img src="http://static.wooyun.org//drops/20151218/20151218084839280721514.png" alt="p15" /> 图DialogPushActivity界面</p>

<p>启动WifiZengQiongService自动安装服务。之前的Ghosh Push,Kemoge等病毒家族，都是先对设备root然后植入推广应用。而该恶意应用的AccessibilityService一旦被启动，随后应用弹出恶意广告界面，即使受害者关闭弹出的广告，该应用程序也会被自动下载，随后成功安装。这个过程是调用系统的packageinstaller,获取安装界面的按钮位置，Accessibility提供的模拟用户点击功能，代替用户自动点击下一步，直到安装结束。下图是弹出的广告图，触碰后即可开始下载安装推广的应用。下图AccessibilityService里唤起安装界面</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084843105411612.png" alt="p16" /> 图调用系统packageInstaller</p>

<p>AccessibilityService的onAccessibilityEvent方法不仅处理’com.android.packageinstaller’ 的event,还处理一些安全软件，这样该恶意应用将会完全控制安全软件行为，也就意味着该应用可以自动安装，启动任意app，卸载任意应用，而且利用AccessibilityService控制安全软件进行免杀。</p>

<p><img src="http://static.wooyun.org//drops/20151218/20151218084845548301712.png" alt="p17" /> 图AccessibilityService控制指定应用包</p>

<p>在推广的应用成功安装过后，系统将会发出<code>“android.intent.action.PACKAGE_ADDED”</code>广播消息，AppListenerReceiver类接受该广播并启动应用。</p>

<h1>0x03 总结与建议</h1>

<hr />

<p>到此滥用<code>AccessibilityService</code>过程分析完毕。该应用已增强WIFI信号诱惑用户启用<code>Accessibility</code>，以及查看WIFI密码是应用获取root权限。在此提醒用户谨慎给不受信应用开启<code>AccessibilityService</code>，以免被恶意应用控制；最近火热的抢红包应用也会利用<code>AccessibilityService</code>，实现自动抢功能，我们已发现黑客利用‘自动抢红包’诱导用户开启<code>AccessibilityService</code>控制手机，建议用户在安全渠道下载抢红包软件，以免不必要的损失。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          